<?php

namespace com\aristo\ingenieros\model;

include 'com/aristo/ingenieros/view/OrdenImprimirView.php';
include 'com/aristo/ingenieros/view/OrdenCompImprimirView.php';
include 'com/aristo/ingenieros/view/OrdenView.php';
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

use com\aristo\ingenieros\view\OrdenImprimirView;
use com\aristo\ingenieros\view\OrdenCompImprimirView;
use com\aristo\ingenieros\view\NumberEntityView;
use com\aristo\ingenieros\view\EntityView;
use com\aristo\ingenieros\view\OrdenView;
use \mysqli;

/**
 * Description of DocumentQuery
 *
 * @author ARISTO INGENIEROS
 */
class OrderQuery {

    //put your code here
    public static function getMaxNroOrden(mysqli $con) {
        try {
            $sql = "SELECT
                        Max(ocs.numeracion)
                    FROM
                        documento AS d
                        LEFT JOIN tipodocumento AS td ON d.tipodocumento_id = td.idtipodocumento
                        INNER JOIN orden_compra_servicio AS ocs ON ocs.documento_id = d.iddocumento
                    WHERE
                        td.descripcion = 'EGRESO' AND d.anulado = 'NO'";

            $query = $con->query($sql);

            if ($query) {
                if ($query->num_rows > 0) {
                    $orden = new NumberEntityView();
                    while ($row = $query->fetch_row()) {
                        $maxnro = utf8_decode($row[0]);
                        $orden->setSiguiente($maxnro);
                    }
                    return $orden->toJSON();
                } else {
                    return "NO EXISTE ORDENES DE COMPRA";
                }
            } else {
                return "ERROR DE RED. <br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
            }
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE ORDEN: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

    public static function addOrdenCompra($numeroorden, $idpersona, $direccion, $almacen, $referencia, $fecha, $detalle, $con) {
        try {
            $numeroorden = ($numeroorden != "") ? utf8_encode($numeroorden) : "NULL";
            $idpersona = utf8_encode($idpersona);
            $direccion = ($direccion != "") ? utf8_encode($direccion) : "NULL";
            $almacen = ($almacen != "") ? utf8_encode($almacen) : "NULL";
            $referencia = ($referencia != "") ? utf8_encode($referencia) : "NULL";
            $fecha = utf8_encode($fecha);

            $sqlBuscaTipo = "SELECT td.idtipodocumento FROM tipodocumento AS td WHERE td.descripcion = 'EGRESO'";

            $con->autocommit(FALSE);
            $search = $con->query($sqlBuscaTipo);

            if ($search) {
                $idtipo = "";
                while ($row = $search->fetch_row()) {
                    $idtipo = utf8_decode($row[0]);
                }

                $sql = "INSERT INTO documento (iddocumento, fecha, tipodocumento_id) VALUES (NULL, '" . $fecha . "', " . $idtipo . ")";
                $query = $con->query($sql);

                if ($query) {
                    $iddocumento = $con->insert_id;
                    $sqlrecibo = "INSERT INTO orden_compra_servicio (idorden_compra_servicio, documento_id, numeracion, proveedor_id, direccionalmacen, descripcion, referencia) VALUES (NULL, " . $iddocumento . ", " . $numeroorden . ", " . $idpersona . ", '" . $almacen . "', '" . $direccion . "', '" . $referencia . "')";
                    $queryRecibo = $con->query($sqlrecibo);

                    //echo var_dump($queryRecibo)." ==> ".$sqlrecibo;
                    if ($queryRecibo) {
                        $idOrdenCompra = $con->insert_id;
                        $sinerrorDetalle = TRUE;

                        foreach ($detalle as $item) {
                            $idconcepto = utf8_encode($item['id']);
                            //$concepto = $item['concepto'];
                            $cantidad = utf8_encode($item['cantidad']);
                            $monto = utf8_encode($item['monto']);

                            $sqldetalle = "INSERT INTO detalledocumento (documento_id, concepto_id, cantidad, valor_unitario) VALUES (" . $iddocumento . ", " . $idconcepto . ", " . $cantidad . ", '" . $monto . "')";
                            $queryDetalle = $con->query($sqldetalle);

                            if (!$queryDetalle) {
                                $sinerrorDetalle = FALSE;
                            }
                        }

                        if ($sinerrorDetalle) {
                            $rpta = new EntityView();
                            $rpta->setResponse("SUCCESS");
                            $rpta->setId($iddocumento);
                            $rpta->setIdOrden($idOrdenCompra);
                            $rpta->setDescripcion("AGREGADO CORRECTAMENTE");
                            return $rpta->toJSON();
                        } else {
                            return "ERROR DE RED.<br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
                        }
                    } else {
                        return "ERROR DE RED.<br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
                    }
                } else {
                    return "ERROR DE RED.<br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
                }
            } else {
                return "ERROR DE RED.<br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
            }
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE ORDEN COMPRA: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

    public static function getOrden($idDocumento, mysqli $con) {
        try {
            $sql = "SELECT
                        ocs.numeracion,
                        d.fecha,
                        p.apellido_paterno,
                        p.apellido_materno,
                        p.nombres,
                        p.direccion,
                        ocs.direccionalmacen,
                        ocs.descripcion,
                        ocs.referencia,
                        dp.razonsocial,
                        dp.ruc
                    FROM
                        documento AS d
                        INNER JOIN orden_compra_servicio AS ocs ON d.iddocumento = ocs.documento_id
                        INNER JOIN persona AS p ON ocs.proveedor_id = p.idpersona
                        INNER JOIN detalle_persona AS dp ON p.idpersona = dp.persona_id
                        INNER JOIN tipodocumento AS td ON d.tipodocumento_id = td.idtipodocumento
                    WHERE
                        td.descripcion = 'EGRESO' AND d.iddocumento = " . $idDocumento;
            $query = $con->query($sql);

            if ($query) {
                if ($query->num_rows > 0) {
                    $orden = new OrdenImprimirView();
                    while ($row = $query->fetch_row()) {
                        $numeracion = utf8_decode($row[0]);
                        $fecha = utf8_decode($row[1]);
                        $apaterno = utf8_decode($row[2]);
                        $amaterno = utf8_decode($row[3]);
                        $nombres = utf8_decode($row[4]);
                        $direccion = utf8_decode($row[5]);
                        $almacen = utf8_decode($row[6]);
                        $descripcion = utf8_decode($row[7]);
                        $referencia = utf8_decode($row[8]);
                        $razon = utf8_decode($row[9]);
                        $ruc = utf8_decode($row[10]);

                        $orden->setNumeracion($numeracion);
                        $orden->setApaterno($apaterno);
                        $orden->setAmaterno($amaterno);
                        $orden->setNombres($nombres);
                        $orden->setDireccion($direccion);
                        $orden->setAlmacen($almacen);
                        $orden->setDescripcion($descripcion);
                        $orden->setReferencia($referencia);
                        $orden->setRazonsocial($razon);
                        $orden->setRuc($ruc);
                        $orden->setFecha($fecha);
                    }
                    return $orden->toJSON();
                } else {
                    return "NO EXISTE Orden de Compra";
                }
            } else {
                return "ERROR DE RED. <br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
            }
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE ORDEN DE COMPRA: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

    public static function getOrdenId($id, mysqli $con) {
        try {
            $sql = "SELECT
                        ocs.numeracion,
                        d.fecha,
                        p.apellido_paterno,
                        p.apellido_materno,
                        p.nombres,
                        p.direccion,
                        ocs.direccionalmacen,
                        ocs.descripcion,
                        ocs.referencia,
                        dp.razonsocial,
                        dp.ruc,                        
                        c.numeracion,
                        c.nrcheque,
                        c.nrofactura,
                        c.fecha,
                        c.sector,
                        c.pliego,
                        c.programa,
                        c.subprograma,
                        c.proyecto,
                        c.obra,
                        c.fuertefinan,
                        c.funcional
                    FROM
                        documento AS d
                        INNER JOIN orden_compra_servicio AS ocs ON d.iddocumento = ocs.documento_id
                        INNER JOIN persona AS p ON ocs.proveedor_id = p.idpersona
                        INNER JOIN detalle_persona AS dp ON p.idpersona = dp.persona_id
                        INNER JOIN tipodocumento AS td ON d.tipodocumento_id = td.idtipodocumento
                        LEFT JOIN comprobante AS c ON ocs.idorden_compra_servicio = c.orden_compra_servicio_id
                    WHERE
                        td.descripcion = 'EGRESO' AND ocs.idorden_compra_servicio = " . $id;
            $query = $con->query($sql);

            if ($query) {
                if ($query->num_rows > 0) {
                    $orden = new OrdenCompImprimirView();
                    while ($row = $query->fetch_row()) {
                        $numeracion = utf8_decode($row[0]);
                        $fecha = utf8_decode($row[1]);
                        $apaterno = utf8_decode($row[2]);
                        $amaterno = utf8_decode($row[3]);
                        $nombres = utf8_decode($row[4]);
                        $direccion = utf8_decode($row[5]);
                        $almacen = utf8_decode($row[6]);
                        $descripcion = utf8_decode($row[7]);
                        $referencia = utf8_decode($row[8]);
                        $razon = utf8_decode($row[9]);
                        $ruc = utf8_decode($row[10]);
                        $cnumeracion = utf8_decode($row[11]);
                        $cnrcheque = utf8_decode($row[12]);
                        $cnrofactura = utf8_decode($row[13]);
                        $cfecha = utf8_decode($row[14]);
                        $csector = utf8_decode($row[15]);
                        $cpliego = utf8_decode($row[16]);
                        $cprograma = utf8_decode($row[17]);
                        $csubprograma = utf8_decode($row[18]);
                        $cproyecto = utf8_decode($row[19]);
                        $cobra = utf8_decode($row[20]);
                        $cfuertefinan = utf8_decode($row[21]);
                        $cfuncional = utf8_decode($row[22]);

                        $orden->setNumeracion($numeracion);
                        $orden->setApaterno($apaterno);
                        $orden->setAmaterno($amaterno);
                        $orden->setNombres($nombres);
                        $orden->setDireccion($direccion);
                        $orden->setAlmacen($almacen);
                        $orden->setDescripcion($descripcion);
                        $orden->setReferencia($referencia);
                        $orden->setRazonsocial($razon);
                        $orden->setRuc($ruc);
                        $orden->setFecha($fecha);
                        $orden->setComp_numeracion($cnumeracion);
                        $orden->setComp_nrcheque($cnrcheque);
                        $orden->setComp_nrofactura($cnrofactura);
                        $orden->setComp_fecha($cfecha);
                        $orden->setComp_sector($csector);
                        $orden->setComp_pliego($cpliego);
                        $orden->setComp_programa($cprograma);
                        $orden->setComp_subprograma($csubprograma);
                        $orden->setComp_proyecto($cproyecto);
                        $orden->setComp_obra($cobra);
                        $orden->setComp_fuertefinan($cfuertefinan);
                        $orden->setComp_funcional($cfuncional);
                    }
                    return $orden->toJSON();
                } else {
                    return "NO EXISTE Orden de Compra";
                }
            } else {
                return "ERROR DE RED. <br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
            }
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE ORDEN DE COMPRA: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

    public static function getOrdenesComp(mysqli $con) {
        try {
            $sql = "SELECT
                        d.iddocumento,
                        ocs.numeracion AS ORDEN,
                        c.numeracion AS COMPROBANTE,
                        CONCAT(p.apellido_paterno,' ',p.apellido_materno,' ',p.nombres) AS PERSONA,
                        CONCAT(dp.ruc,' ',dp.razonsocial) AS EMPRESA,
                        d.fecha
                    FROM
                        documento AS d
                        INNER JOIN tipodocumento AS td ON d.tipodocumento_id = td.idtipodocumento
                        INNER JOIN orden_compra_servicio AS ocs ON ocs.documento_id = d.iddocumento
                        INNER JOIN comprobante AS c ON c.orden_compra_servicio_id = ocs.idorden_compra_servicio
                        INNER JOIN persona AS p ON p.idpersona = ocs.proveedor_id
                        RIGHT JOIN detalle_persona AS dp ON dp.persona_id = p.idpersona
                    WHERE
                        td.descripcion = 'EGRESO' AND d.anulado = 'NO' AND 
                        YEAR(NOW()) = YEAR(d.fecha) AND MONTH(NOW()) - 5 <= MONTH(d.fecha)";
            $query = $con->query($sql);

            if ($query) {
                if ($query->num_rows > 0) {
                    $ordenes = array();
                    while ($row = $query->fetch_row()) {
                        $id = utf8_decode($row[0]);
                        $nroorden = utf8_decode($row[1]);
                        $nrocomprobante = utf8_decode($row[2]);
                        $persona = utf8_decode($row[3]);
                        $empresa = utf8_decode($row[4]);
                        $fecha = utf8_decode($row[5]);

                        $orden = new OrdenView();
                        $orden->setId($id);
                        $orden->setNroorden($nroorden);
                        $orden->setNrocomprobante($nrocomprobante);
                        $orden->setPersona($persona);
                        $orden->setEmpresa($empresa);
                        $orden->setFecha($fecha);
                        $ordenes [] = $orden->toJSON();
                    }
                    return $ordenes;
                } else {
                    return "NO EXISTE ORDENES CONFIGURADOS";
                }
            } else {
                return "ERROR DE RED. <br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
            }
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE RECIBO: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

}